package com.yuanqunsoft.alimigration.dao;

import com.yuanqunsoft.alimigration.dao.support.Page;
import com.yuanqunsoft.alimigration.model.Application;

import java.util.List;

public interface IApplicationDao {

    public boolean isNameExisted(String name);

    public void save(Application instance);

    public void delete(Application instance);

    public Application findById(Integer id);

    public List findByName(String name);

    public List findAll();

    public void rename(String name, Integer appId);

    public void update(Application instance);

    public boolean hqlExcute(String hql, Object... values);

    /**
     * 
     * @param hql
     * @param values
     * @return
     */
    public List<Application> hqlQuery(String hql, Object... values);

    /**
     * @param <T>
     * @param hql
     * @param pageNo
     *            页面号
     * @param pageSize
     *            页面容量
     * @param values
     * @return
     */
    public <Application> Page<Application> pagedQuery(String hql, int pageNo, int pageSize, Object... values);

    /**
     * @param <T>
     * @param hql
     * @param startNo
     *            分页从哪一条数据开始
     * @param pageSize
     *            页面容量
     * @param values
     * @return
     */
    public Page<Application> pagedQueryByStartNo(String hql, int startNo, int pageSize, Object... values);

    /**
     * 根据命名参数查询
     * 
     * @param <T>
     * @param hql
     *            带有命名参数的hql语句
     * @param paramNames
     *            命名参数的名字
     * @param values
     *            命名参数的值<br>
     *            <b>例如:</b><br>
     *            findByNamedParams("from Test where t1 = :t",new String[]{"t"},tValue);
     * @return
     */
    public List<Application> findByNamedParams(String hql, String[] paramNames, Object... values);

}